package fst

trait Tester {
   val reverse: String
   val isPrime: Option[String] = None
   val firstNPrimes: Option[String] = None
   
   type Node 
   def prettyPrint(n: Node): String

   type Term <: Node
   type Type <: Node
   
   // result is Some(tm), where tm represents a term, or None if an error occurred   
   def parse(expr: String): Option[Term]
   
   // result is Some(tp), where tp represents a type, or None if an error occurred   
   def typeOf(expr: Term): Option[Type]
   
   // result is Some(v), where v represents a value, or None if an error occurred
   def eval(expr: Term): Option[Term]
}